/******************************************************************************* * Copyright (c) 2014 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation ******************************************************************************/ package org.eclipse.ui.tests.themes; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import junit.framework.TestCase; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.ColorRegistry; import org.eclipse.jface.resource.FontRegistry; import org.eclipse.ui.internal.themes.ColorDefinition; import org.eclipse.ui.internal.themes.FontDefinition; import org.eclipse.ui.internal.themes.ThemeRegistry; import org.eclipse.ui.internal.themes.WorkbenchThemeManager.ThemeRegistryModifiedHandler; import org.eclipse.ui.themes.ITheme; import org.osgi.service.event.Event; import static org.mockito.Mockito.*; /** * @since 3.5 * */ public class ThemeRegistryModifiedHandlerTest extends TestCase { public void testHandleEvent() throws Exception { //given FontDefinition fontDefinition1 = mock(FontDefinition.class); doReturn("fontDefinition1").when(fontDefinition1).getId(); doReturn(true).when(fontDefinition1).isOverridden(); FontDefinition fontDefinition2 = mock(FontDefinition.class); doReturn("fontDefinition2").when(fontDefinition2).getId(); doReturn(false).when(fontDefinition2).isOverridden(); ColorDefinition colorDefinition = mock(ColorDefinition.class); doReturn("colorDefinition").when(colorDefinition).getId(); doReturn(true).when(colorDefinition).isOverridden(); ThemeRegistry themeRegistry = spy(new ThemeRegistry()); doReturn(new FontDefinition[]{fontDefinition1, fontDefinition2}).when(themeRegistry).getFonts(); doReturn(new ColorDefinition[] {colorDefinition}).when(themeRegistry).getColors(); FontRegistry fontRegistry = mock(FontRegistry.class); ColorRegistry colorRegistry = mock(ColorRegistry.class); ITheme colorsAndFontsTheme = mock(ITheme.class); doReturn("3.x theme id").when(colorsAndFontsTheme).getId(); org.eclipse.e4.ui.css.swt.theme.ITheme cssTheme = mock(org.eclipse.e4.ui.css.swt.theme.ITheme.class); doReturn("css theme id").when(cssTheme).getId(); ThemeRegistryModifiedHandlerTestable handler = spy(new ThemeRegistryModifiedHandlerTestable()); doReturn(themeRegistry).when(handler).getThemeRegistry(); doReturn(fontRegistry).when(handler).getFontRegistry(); doReturn(colorRegistry).when(handler).getColorRegistry(); doReturn(colorsAndFontsTheme).when(handler).getColorsAndFontsTheme(); doReturn(cssTheme).when(handler).getTheme(); //when handler.handleEvent(mock(Event.class)); //then verify(handler, times(1)).populateThemeRegistries(themeRegistry, fontRegistry, colorRegistry, cssTheme, colorsAndFontsTheme); verify(handler, times(1)).sendThemeDefinitionChangedEvent(); } public void testPopulateThemeRegistries() throws Exception { //given FontDefinition fontDefinition1 = mock(FontDefinition.class); doReturn("fontDefinition1").when(fontDefinition1).getId(); doReturn(true).when(fontDefinition1).isOverridden(); FontDefinition fontDefinition2 = mock(FontDefinition.class); doReturn("fontDefinition2").when(fontDefinition2).getId(); doReturn(false).when(fontDefinition2).isOverridden(); doReturn(false).when(fontDefinition2).isAddedByCss(); ColorDefinition colorDefinition1 = mock(ColorDefinition.class); doReturn("colorDefinition1").when(colorDefinition1).getId(); doReturn(false).when(colorDefinition1).isOverridden(); doReturn(false).when(colorDefinition1).isAddedByCss(); ColorDefinition colorDefinition2 = mock(ColorDefinition.class); doReturn("colorDefinition2").when(colorDefinition2).getId(); doReturn(true).when(colorDefinition2).isAddedByCss(); ThemeRegistry themeRegistry = spy(new ThemeRegistry()); doReturn(new FontDefinition[]{fontDefinition1, fontDefinition2}).when(themeRegistry).getFonts(); doReturn(new ColorDefinition[] {colorDefinition1, colorDefinition2}).when(themeRegistry).getColors(); ThemeRegistryModifiedHandlerTestable handler = spy(new ThemeRegistryModifiedHandlerTestable()); //when handler.populateThemeRegistries(themeRegistry, mock(FontRegistry.class), mock(ColorRegistry.class), mock(org.eclipse.e4.ui.css.swt.theme.ITheme.class), mock(ITheme.class)); //then verify(fontDefinition1, times(1)).isOverridden(); verify(fontDefinition1, never()).isAddedByCss(); verify(handler, times(1)).populateDefinition(any(org.eclipse.e4.ui.css.swt.theme.ITheme.class), any(ITheme.class), any(FontRegistry.class), eq(fontDefinition1), any(IPreferenceStore.class)); verify(fontDefinition2, times(1)).isOverridden(); verify(fontDefinition2, times(1)).isAddedByCss(); verify(handler, never()).populateDefinition(any(org.eclipse.e4.ui.css.swt.theme.ITheme.class), any(ITheme.class), any(FontRegistry.class), eq(fontDefinition2), any(IPreferenceStore.class)); verify(colorDefinition1, times(1)).isOverridden(); verify(colorDefinition1, times(1)).isAddedByCss(); verify(handler, never()).populateDefinition(any(org.eclipse.e4.ui.css.swt.theme.ITheme.class), any(ITheme.class), any(ColorRegistry.class), eq(colorDefinition1), any(IPreferenceStore.class)); verify(colorDefinition2, times(1)).isOverridden(); verify(colorDefinition2, times(1)).isAddedByCss(); verify(handler, times(1)).populateDefinition(any(org.eclipse.e4.ui.css.swt.theme.ITheme.class), any(ITheme.class), any(ColorRegistry.class), eq(colorDefinition2), any(IPreferenceStore.class)); } public static class ThemeRegistryModifiedHandlerTestable extends ThemeRegistryModifiedHandler { @Override public void populateThemeRegistries(ThemeRegistry themeRegistry, FontRegistry fontRegistry, ColorRegistry colorRegistry, org.eclipse.e4.ui.css.swt.theme.ITheme cssTheme, ITheme theme) { super.populateThemeRegistries(themeRegistry, fontRegistry, colorRegistry, cssTheme, theme); } @Override public void sendThemeDefinitionChangedEvent() { } @Override public org.eclipse.e4.ui.css.swt.theme.ITheme getTheme() { return null; } @Override public ITheme getColorsAndFontsTheme() { return null; } @Override public ThemeRegistry getThemeRegistry() { return null; } @Override public FontRegistry getFontRegistry() { return null; } @Override public ColorRegistry getColorRegistry() { return null; } @Override public void populateDefinition(org.eclipse.e4.ui.css.swt.theme.ITheme cssTheme, ITheme theme, FontRegistry registry, FontDefinition definition, IPreferenceStore store) { } @Override public void populateDefinition(org.eclipse.e4.ui.css.swt.theme.ITheme cssTheme, ITheme theme, ColorRegistry registry, ColorDefinition definition, IPreferenceStore store) { } } }